/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package intraverbal;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import javax.swing.table.AbstractTableModel;

/**
 *
 * @author Felipe
 */
public class ProdutoTableModel extends AbstractTableModel {

    //constantes que vão representar as colunas 
    //(só para facilitar o entendimento do código)
    private final int COL_NOME = 0;
    private final int COL_SEXO = 1;
    private final int COL_DT_NASCIMENTO = 2;
    private final int COL_OBSERVACAO = 3;
    //lista dos produtos que serão exibidos
    private List<participanteC> participantes;

    public ProdutoTableModel() {
        participantes = new ArrayList<>();
    }

    public ProdutoTableModel(List<participanteC> lista) {
        this();
        participantes.addAll(lista);
    }

    @Override
    public int getRowCount() {
        //quantidade de linhas
        //cada produto na lista será uma linha
        return participantes.size();
    }

    @Override
    public int getColumnCount() {
        //quantidade de colunas
        //vamos exibir só Nome e Quantidade, então são 2 colunas
        return 4;
    }

    @Override
    public String getColumnName(int column) {
        //qual o nome da coluna
        if (column == COL_NOME) {
            return "Nome";
        } else if (column == COL_SEXO) {
            return "Sexo";
        } else if (column == COL_DT_NASCIMENTO) {
            return "Data de Nascimento";
        } else if (column == COL_OBSERVACAO) {
            return "Observacao";
        }
        return "";
    }

    @Override
    public Class<?> getColumnClass(int columnIndex) {
        //retorna a classe que representa a coluna
        if (columnIndex == COL_NOME) {
            return String.class;
        } else if (columnIndex == COL_SEXO) {
            return String.class;
        } else if (columnIndex == COL_DT_NASCIMENTO) {
            return String.class;
        } else if (columnIndex == COL_OBSERVACAO) {
            return String.class;
        }
        return String.class;
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        //pega o produto da linha
        participanteC p = participantes.get(rowIndex);

        //verifica qual valor deve ser retornado
        if (columnIndex == COL_NOME) {
            return p.getNome();
        } else if (columnIndex == COL_SEXO) {
            return p.getSexo();
        } else if (columnIndex == COL_DT_NASCIMENTO) {
            return p.getNascimento();
        } else if (columnIndex == COL_OBSERVACAO) {
            return p.getObsevacao();
        }
        return "";
    }

    @Override
    public boolean isCellEditable(int rowIndex, int columnIndex) {
        //a célula vai ser editável?
        //no nosso caso todas vão ser editáveis, entao retorna true pra td
        return true;
    }

    @Override
    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
        //pega o produto da linha
        participanteC p = participantes.get(rowIndex);

        //verifica qual valor vai ser alterado
        if (columnIndex == COL_NOME) {
            p.setNome(aValue.toString());
        } else if (columnIndex == COL_SEXO) {
            p.setSexo(aValue.toString());
        } else if (columnIndex == COL_DT_NASCIMENTO) {
            p.setNascimento(aValue.toString());
        } else if (columnIndex == COL_OBSERVACAO) {
            p.setObsevacao(aValue.toString());
        }

        //avisa que os dados mudaram
        fireTableDataChanged();
    }

    //-----------------------------------------------------
    //Métodos personalizados
    //-----------------------------------------------------
    public void inserir(participanteC p) {
        participantes.add(p);

        fireTableDataChanged();
    }

    public void excluir(int pos) {
        participantes.remove(pos);

        fireTableDataChanged();
    }

    public void excluir(participanteC p) {
        participantes.remove(p);

        fireTableDataChanged();
    }


    public void misturar() {
        //mistura a lista
        Collections.shuffle(participantes);

        //avisa que a tabela foi alterada
        fireTableDataChanged();
    }

    public participanteC getCliente(int pos) {
        if (pos >= participantes.size()) {
            return null;
        }

        return participantes.get(pos);
    }
}

